#include <iostream>
using namespace std;
const int N = 100010;

// head表示头结点的下标
// e[i]表示节点i的值
// ne[i]表示节点i的next指针是多少
// idx存储当前已经用到了哪个点
int head, e[N], ne[N], idx;

// 初始化
void init()
{
    head = -1;
    idx = 0;
}

// 将x插到头结点
void add_to_head(int x)
{
    e[idx] = x, ne[idx] = head, head = idx++;
    // e[0]=x ne[0]=-1 head=0 idx=1
    // 当前点值为x，新点的next为原来的head，head为现在的idx，idx++
}

// 将x插到下标是k的点的后面
void add(int k, int x)
{
    e[idx] = x, ne[idx] = ne[k], ne[k] = idx++;
    // 当前点值为x，新点的next为旧点的next，旧点的next为idx，idx++
}

// 将下标是k的点后面的点删掉
void remove(int k)
{
    ne[k] = ne[ne[k]]; // k后面的点为k后面的后面的点
}

int main()
{
    int m;
    cin >> m;

    init();

    while (m--) // 选择执行函数
    {
        int k, x;
        char op;
        cin >> op;
        if (op == 'H')
        {
            cin >> x;
            add_to_head(x);
        }
        else if (op == 'D')
        {
            cin >> k;
            remove(k);
        }
        else
        {
            cin >> k >> x;
            add(k, x);
        }
    }
    for (int i = head; i != -1; i = ne[i])
        cout << e[i] << ' '; // 输出链表
    cout << endl;
    return 0;
}